home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Interfaces / CIncludes / Displays.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-11  |  20.9 KB  |  483 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Displays.h
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a3  ETO #16, MPW prerelease.  Friday, November 11, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16.  
  17. #ifndef __DISPLAYS__
  18. #define __DISPLAYS__
  19.  
  20.  
  21. #ifndef __CONDITIONALMACROS__
  22. #include <ConditionalMacros.h>
  23. #endif
  24.  
  25. #ifndef __COMPONENTS__
  26. #include <Components.h>
  27. #endif
  28. /*    #include <Types.h>                                            */
  29. /*    #include <MixedMode.h>                                        */
  30. #ifndef __SKIP_DISPLAY_INCLUDES__
  31.  
  32. #ifndef __APPLEEVENTS__
  33. #include <AppleEvents.h>
  34. #endif
  35. /*    #include <Errors.h>                                            */
  36. /*    #include <Memory.h>                                            */
  37. /*    #include <OSUtils.h>                                        */
  38. /*    #include <Events.h>                                            */
  39. /*        #include <Quickdraw.h>                                    */
  40. /*            #include <QuickdrawText.h>                            */
  41. /*    #include <EPPC.h>                                            */
  42. /*        #include <PPCToolbox.h>                                    */
  43. /*            #include <AppleTalk.h>                                */
  44. /*        #include <Processes.h>                                    */
  45. /*            #include <Files.h>                                    */
  46. /*    #include <Notification.h>                                    */
  47.  
  48. #ifndef __WINDOWS__
  49. #include <Windows.h>
  50. #endif
  51. /*    #include <Controls.h>                                        */
  52. /*        #include <Menus.h>                                        */
  53. #endif
  54.  
  55. #ifdef __cplusplus
  56. extern "C" {
  57. #endif
  58.  
  59. #if GENERATINGPOWERPC
  60. #pragma options align=mac68k
  61. #endif
  62.  
  63. #ifdef __CFM68K__
  64. #pragma lib_export on
  65. #endif
  66.  
  67.  
  68. enum {
  69. /* AppleEvents Core Suite */
  70.     kAESystemConfigNotice        = 'cnfg',
  71. /* Core Suite types */
  72.     kAEDisplayNotice            = 'dspl',
  73.     kAEDisplaySummary            = 'dsum',
  74.     keyDMConfigVersion            = 'dmcv',
  75.     keyDMConfigFlags            = 'dmcf',
  76.     keyDMConfigReserved            = 'dmcr',
  77.     keyDisplayID                = 'dmid',
  78.     keyDisplayComponent            = 'dmdc',
  79.     keyDisplayDevice            = 'dmdd',
  80.     keyDisplayFlags                = 'dmdf',
  81.     keyDisplayMode                = 'dmdm',
  82.     keyDisplayModeReserved        = 'dmmr',
  83.     keyDisplayReserved            = 'dmdr',
  84.     keyDisplayMirroredId        = 'dmmi',
  85.     keyDeviceFlags                = 'dddf',
  86.     keyDeviceDepthMode            = 'dddm',
  87.     keyDeviceRect                = 'dddr',
  88.     keyPixMapRect                = 'dpdr',
  89.     keyPixMapHResolution        = 'dphr',
  90.     keyPixMapVResolution        = 'dpvr',
  91.     keyPixMapPixelType            = 'dppt',
  92.     keyPixMapPixelSize            = 'dpps',
  93.     keyPixMapCmpCount            = 'dpcc',
  94.     keyPixMapCmpSize            = 'dpcs',
  95.     keyPixMapAlignment            = 'dppa',
  96.     keyPixMapResReserved        = 'dprr',
  97.     keyPixMapReserved            = 'dppr',
  98.     keyPixMapColorTableSeed        = 'dpct',
  99.     keySummaryMenubar            = 'dsmb',
  100.     keySummaryChanges            = 'dsch',
  101.     keyDisplayOldConfig            = 'dold',
  102.     keyDisplayNewConfig            = 'dnew'
  103. };
  104.  
  105. enum {
  106.     dmOnlyActiveDisplays        = true,
  107.     dmAllDisplays                = false
  108. };
  109.  
  110. enum {
  111. /* Switch Flags */
  112.     kNoSwitchConfirmBit            = 0,                            /* Flag indicating that there is no need to confirm a switch to this mode */
  113.     kDepthNotAvailableBit,                                        /* Current depth not available in new mode */
  114.     kShowModeBit                = 3,                            /* Show this mode even though it requires a confirm. */
  115.     kModeNotResizeBit            = 4                                /* Do not use this mode to resize display (for cards that mode drives a different connector). */
  116. };
  117.  
  118. enum {
  119. /*    Summary Change Flags (sticky bits indicating an operation was performed)
  120.     For example, moving a display then moving it back will still set the kMovedDisplayBit.
  121. */
  122.     kBeginEndConfigureBit        = 0,
  123.     kMovedDisplayBit,
  124.     kSetMainDisplayBit,
  125.     kSetDisplayModeBit,
  126.     kAddDisplayBit,
  127.     kRemoveDisplayBit,
  128.     kNewDisplayBit,
  129.     kDisposeDisplayBit,
  130.     kEnabledDisplayBit,
  131.     kDisabledDisplayBit,
  132.     kMirrorDisplayBit,
  133.     kUnMirrorDisplayBit
  134. };
  135.  
  136. enum {
  137. /* Notification Messages for extended call back routines */
  138.     kDMNotifyInstalled            = 1,                            /* At install time */
  139.     kDMNotifyEvent                = 2,                            /* Post change time */
  140.     kDMNotifyRemoved            = 3,                            /* At remove time */
  141.     kDMNotifyPrep                = 4,                            /* Pre change time */
  142.     kDMNotifyExtendEvent        = 5,                            /* Allow registrees to extend apple event before it is sent */
  143.     kDMNotifyDependents            = 6,                            /* Minor notification check without full update */
  144. /* Notification Flags */
  145.     kExtendedNotificationProc    = (1 << 16)
  146. };
  147.  
  148. /* Selectors for tablecloths */
  149. enum {
  150.     kTableclothInit,
  151.     kTableclothDraw,
  152.     kTableclothAnimate,
  153.     kTableclothAnimateContinue,
  154.     kTableclothClose
  155. };
  156.  
  157. typedef short TableclothMessagesType;
  158.  
  159. /* types for notifyType */
  160.  
  161. enum {
  162.     kFullNotify,                                                /* This is the appleevent whole nine yards notify */
  163.     kFullDependencyNotify                                        /* Only sends to those who want to know about interrelated functionality (used for updating UI) */
  164. };
  165.  
  166. /* DisplayID/DeviceID constants */
  167. enum {
  168.     kDummyDeviceID                = 0x0FF,                        /* This is the ID of the dummy display, used when the last “real” display is disabled.*/
  169.     kInvalidDisplayID            = 0x000,                        /* This is the invalid ID*/
  170.     kFirstDisplayID                = 0x100
  171. };
  172.  
  173. enum {
  174. /* bits for panelListFlags */
  175.     kAllowDuplicatesBit            = 0
  176. };
  177.  
  178. /* Constants for fidelity checks */
  179. enum {
  180.     kNoFidelity                    = 0,
  181.     kMinimumFidelity            = 1,
  182.     kDefaultFidelity            = 500,                            /* I'm just picking a number for Apple default panels and engines*/
  183.     kDefaultManufacturorFidelity = 1000                            /* I'm just picking a number for Manufacturor's panels and engines (overrides apple defaults)*/
  184. };
  185.  
  186. enum {
  187.     kAnyPanelType                = 0,                            /* Pass to DMNewEngineList for list of all panels (as opposed to specific types)*/
  188.     kAnyEngineType                = 0,                            /* Pass to DMNewEngineList for list of all engines*/
  189.     kAnyDeviceType                = 0,                            /* Pass to DMNewDeviceList for list of all devices*/
  190.     kAnyPortType                = 0                                /* Pass to DMNewDevicePortList for list of all devices*/
  191. };
  192.  
  193. /* portListFlags for DM_NewDevicePortList */
  194. enum {
  195. /* Should offline devices be put into the port list (such as dummy display) */
  196.     kPLIncludeOfflineDevicesBit    = 0
  197. };
  198.  
  199. typedef unsigned long DMFidelityType;
  200.  
  201. typedef unsigned long DisplayIDType;
  202.  
  203. typedef void *DMListType;
  204.  
  205. typedef unsigned long DMListIndexType;
  206.  
  207. struct DMListEntryRec {
  208.     DisplayIDType                    itemID;                        /* DisplayID Manager*/
  209.     Component                        itemComponent;                /* Component Manager*/
  210.     ComponentDescription            itemDescription;            /* We can always construct this if we use something beyond the compontent mgr.*/
  211.     ResType                            itemClass;                    /* Class of group to put this panel (eg geometry/color/etc for panels, brightness/contrast for engines, video out/sound/etc for devices)*/
  212.     DMFidelityType                    itemFidelity;                /* How good is this item for the specified search?*/
  213.     unsigned long                    itemFlags;                    /* Set to 0 (future expansion)*/
  214.     ResType                            itemReserved;                /* What kind of code does the itemReference point to  (right now - kPanelEntryTypeComponentMgr only)*/
  215.     unsigned long                    itemFuture;                    /* Set to 0 (future expansion - probably an alternate code style)*/
  216. };
  217. typedef struct DMListEntryRec DMListEntryRec;
  218.  
  219. typedef DMListEntryRec *DMListEntryPtr;
  220.  
  221. struct DependentNotifyRec {
  222.     ResType                            notifyType;                    /* What type was the engine that made the change (may be zero)*/
  223.     ResType                            notifyClass;                /* What class was the change (eg geometry, color etc)*/
  224.     DisplayIDType                    displayID;                    /* Which device was touched (kInvalidDisplayID -> all or none)*/
  225.     ComponentInstance                notifyComponent;            /* What engine did it (may be 0)?*/
  226.     unsigned long                    notifyVersion;                /* Set to 0 (future expansion)*/
  227.     unsigned long                    notifyFlags;                /* Set to 0 (future expansion)*/
  228.     unsigned long                    notifyReserved;                /* Set to 0 (future expansion)*/
  229.     unsigned long                    notifyFuture;                /* Set to 0 (future expansion)*/
  230. };
  231. typedef struct DependentNotifyRec DependentNotifyRec;
  232.  
  233. typedef DependentNotifyRec *DependentNotifyPtr;
  234.  
  235. typedef pascal void (*DMNotificationProcPtr)(AppleEvent *theEvent);
  236. typedef pascal void (*DMExtendedNotificationProcPtr)(void *userData, short theMessage, void *notifyData);
  237. typedef pascal OSErr (*DMTableclothProcPtr)(void *refCon, TableclothMessagesType theMsg, void *theData);
  238. typedef pascal void (*DMListIteratorProcPtr)(void *userData, DMListIndexType itemIndex, DMListEntryPtr listInfo);
  239.  
  240. #if GENERATINGCFM
  241. typedef UniversalProcPtr DMNotificationUPP;
  242. typedef UniversalProcPtr DMExtendedNotificationUPP;
  243. typedef UniversalProcPtr DMTableclothUPP;
  244. typedef UniversalProcPtr DMListIteratorUPP;
  245. #else
  246. typedef DMNotificationProcPtr DMNotificationUPP;
  247. typedef DMExtendedNotificationProcPtr DMExtendedNotificationUPP;
  248. typedef DMTableclothProcPtr DMTableclothUPP;
  249. typedef DMListIteratorProcPtr DMListIteratorUPP;
  250. #endif
  251.  
  252. enum {
  253.     uppDMNotificationProcInfo = kPascalStackBased
  254.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(AppleEvent*))),
  255.     uppDMExtendedNotificationProcInfo = kPascalStackBased
  256.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void*)))
  257.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  258.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*))),
  259.     uppDMTableclothProcInfo = kPascalStackBased
  260.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  261.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void*)))
  262.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(TableclothMessagesType)))
  263.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void*))),
  264.     uppDMListIteratorProcInfo = kPascalStackBased
  265.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void*)))
  266.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(DMListIndexType)))
  267.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(DMListEntryPtr)))
  268. };
  269.  
  270. #if GENERATINGCFM
  271. #define NewDMNotificationProc(userRoutine)        \
  272.         (DMNotificationUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDMNotificationProcInfo, GetCurrentArchitecture())
  273. #define NewDMExtendedNotificationProc(userRoutine)        \
  274.         (DMExtendedNotificationUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDMExtendedNotificationProcInfo, GetCurrentArchitecture())
  275. #define NewDMTableclothProc(userRoutine)        \
  276.         (DMTableclothUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDMTableclothProcInfo, GetCurrentArchitecture())
  277. #define NewDMListIteratorProc(userRoutine)        \
  278.         (DMListIteratorUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppDMListIteratorProcInfo, GetCurrentArchitecture())
  279. #else
  280. #define NewDMNotificationProc(userRoutine)        \
  281.         ((DMNotificationUPP) (userRoutine))
  282. #define NewDMExtendedNotificationProc(userRoutine)        \
  283.         ((DMExtendedNotificationUPP) (userRoutine))
  284. #define NewDMTableclothProc(userRoutine)        \
  285.         ((DMTableclothUPP) (userRoutine))
  286. #define NewDMListIteratorProc(userRoutine)        \
  287.         ((DMListIteratorUPP) (userRoutine))
  288. #endif
  289.  
  290. #if GENERATINGCFM
  291. #define CallDMNotificationProc(userRoutine, theEvent)        \
  292.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDMNotificationProcInfo, (theEvent))
  293. #define CallDMExtendedNotificationProc(userRoutine, userData, theMessage, notifyData)        \
  294.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDMExtendedNotificationProcInfo, (userData), (theMessage), (notifyData))
  295. #define CallDMTableclothProc(userRoutine, refCon, theMsg, theData)        \
  296.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDMTableclothProcInfo, (refCon), (theMsg), (theData))
  297. #define CallDMListIteratorProc(userRoutine, userData, itemIndex, listInfo)        \
  298.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppDMListIteratorProcInfo, (userData), (itemIndex), (listInfo))
  299. #else
  300. #define CallDMNotificationProc(userRoutine, theEvent)        \
  301.         (*(userRoutine))((theEvent))
  302. #define CallDMExtendedNotificationProc(userRoutine, userData, theMessage, notifyData)        \
  303.         (*(userRoutine))((userData), (theMessage), (notifyData))
  304. #define CallDMTableclothProc(userRoutine, refCon, theMsg, theData)        \
  305.         (*(userRoutine))((refCon), (theMsg), (theData))
  306. #define CallDMListIteratorProc(userRoutine, userData, itemIndex, listInfo)        \
  307.         (*(userRoutine))((userData), (itemIndex), (listInfo))
  308. #endif
  309.  
  310. struct TableclothInfoRec {
  311.     DMTableclothUPP                    tableclothInstance;
  312.     unsigned long                    nextAnimateTick;
  313.     void                            *refCon;
  314.     Boolean                            allDisplays;
  315.     Boolean                            filler[3];
  316. };
  317. typedef struct TableclothInfoRec TableclothInfoRec, *TableclothInfoPtr;
  318.  
  319. /* Trap interfaces */
  320. extern pascal GDHandle DMGetFirstScreenDevice(Boolean activeOnly)
  321.  TWOWORDINLINE(0x7000, 0xABEB);
  322. extern pascal GDHandle DMGetNextScreenDevice(GDHandle theDevice, Boolean activeOnly)
  323.  TWOWORDINLINE(0x7001, 0xABEB);
  324. extern pascal void DMDrawDesktopRect(Rect *globalRect)
  325.  TWOWORDINLINE(0x7002, 0xABEB);
  326. extern pascal void DMDrawDesktopRegion(RgnHandle globalRgn)
  327.  TWOWORDINLINE(0x7003, 0xABEB);
  328. extern pascal OSErr DMGetGDeviceTablecloth(DisplayIDType displayID, TableclothInfoPtr tableclothInstance)
  329.  THREEWORDINLINE(0x303C, 0x0404, 0xABEB);
  330. extern pascal OSErr DMSetGDeviceTablecloth(DisplayIDType displayID, TableclothInfoPtr tableclothInstance)
  331.  THREEWORDINLINE(0x303C, 0x0405, 0xABEB);
  332. extern pascal OSErr DMBeginConfigureDisplays(Handle *displayState)
  333.  THREEWORDINLINE(0x303C, 0x0206, 0xABEB);
  334. extern pascal OSErr DMEndConfigureDisplays(Handle displayState)
  335.  THREEWORDINLINE(0x303C, 0x0207, 0xABEB);
  336. extern pascal OSErr DMAddDisplay(GDHandle newDevice, short driver, unsigned long mode, unsigned long reserved, unsigned long displayID, ComponentInstance displayComponent, Handle displayState)
  337.  THREEWORDINLINE(0x303C, 0x0D08, 0xABEB);
  338. extern pascal OSErr DMMoveDisplay(GDHandle moveDevice, short x, short y, Handle displayState)
  339.  THREEWORDINLINE(0x303C, 0x0609, 0xABEB);
  340. extern pascal OSErr DMDisableDisplay(GDHandle disableDevice, Handle displayState)
  341.  THREEWORDINLINE(0x303C, 0x040A, 0xABEB);
  342. extern pascal OSErr DMEnableDisplay(GDHandle enableDevice, Handle displayState)
  343.  THREEWORDINLINE(0x303C, 0x040B, 0xABEB);
  344. extern pascal OSErr DMRemoveDisplay(GDHandle removeDevice, Handle displayState)
  345.  THREEWORDINLINE(0x303C, 0x040C, 0xABEB);
  346. /* OBSOLETE ******************
  347. pascal OSErr DMGetComponentAnimateTicks(DMTableclothUPP animationComponent,unsigned long *goodDelay,unsigned long *maxDelay)
  348.     = {0x303C,0x060D,0xABEB}        { ; fix pascal headers
  349.  
  350. pascal OSErr DMSetComponentAnimateTicks(DMTableclothUPP animationComponent,unsigned long goodDelay,unsigned long maxDelay)
  351.     = {0x303C,0x060E,0xABEB}        { ; fix pascal headers
  352.  
  353. pascal OSErr DMGetNextAnimateTime(unsigned long *nextAnimateTime)
  354.     = {0x303C,0x020F,0xABEB}        { ; fix pascal headers
  355. ************************** */
  356. extern pascal OSErr DMSetMainDisplay(GDHandle newMainDevice, Handle displayState)
  357.  THREEWORDINLINE(0x303C, 0x0410, 0xABEB);
  358. extern pascal OSErr DMSetDisplayMode(GDHandle theDevice, unsigned long mode, unsigned long *depthMode, unsigned long reserved, Handle displayState)
  359.  THREEWORDINLINE(0x303C, 0x0A11, 0xABEB);
  360. extern pascal OSErr DMCheckDisplayMode(GDHandle theDevice, unsigned long mode, unsigned long depthMode, unsigned long *switchFlags, unsigned long reserved, Boolean *modeOk)
  361.  THREEWORDINLINE(0x303C, 0x0C12, 0xABEB);
  362. extern pascal OSErr DMGetDeskRegion(RgnHandle *desktopRegion)
  363.  THREEWORDINLINE(0x303C, 0x0213, 0xABEB);
  364. extern pascal OSErr DMRegisterNotifyProc(DMNotificationUPP notificationProc, ProcessSerialNumberPtr whichPSN)
  365.  THREEWORDINLINE(0x303C, 0x0414, 0xABEB);
  366. extern pascal OSErr DMRemoveNotifyProc(DMNotificationUPP notificationProc, ProcessSerialNumberPtr whichPSN)
  367.  THREEWORDINLINE(0x303C, 0x0415, 0xABEB);
  368. extern pascal OSErr DMQDIsMirroringCapable(Boolean *qdIsMirroringCapable)
  369.  THREEWORDINLINE(0x303C, 0x0216, 0xABEB);
  370. extern pascal OSErr DMCanMirrorNow(Boolean *canMirrorNow)
  371.  THREEWORDINLINE(0x303C, 0x0217, 0xABEB);
  372. extern pascal OSErr DMIsMirroringOn(Boolean *isMirroringOn)
  373.  THREEWORDINLINE(0x303C, 0x0218, 0xABEB);
  374. extern pascal OSErr DMMirrorDevices(GDHandle gD1, GDHandle gD2, Handle displayState)
  375.  THREEWORDINLINE(0x303C, 0x0619, 0xABEB);
  376. extern pascal OSErr DMUnmirrorDevice(GDHandle gDevice, Handle displayState)
  377.  THREEWORDINLINE(0x303C, 0x041A, 0xABEB);
  378. extern pascal OSErr DMGetNextMirroredDevice(GDHandle gDevice, GDHandle *mirroredDevice)
  379.  THREEWORDINLINE(0x303C, 0x041B, 0xABEB);
  380. extern pascal OSErr DMBlockMirroring(void)
  381.  TWOWORDINLINE(0x701C, 0xABEB);
  382. extern pascal OSErr DMUnblockMirroring(void)
  383.  TWOWORDINLINE(0x701D, 0xABEB);
  384. extern pascal OSErr DMGetDisplayMgrA5World(unsigned long *dmA5)
  385.  THREEWORDINLINE(0x303C, 0x021E, 0xABEB);
  386. extern pascal OSErr DMGetDisplayIDByGDevice(GDHandle displayDevice, DisplayIDType *displayID, Boolean failToMain)
  387.  THREEWORDINLINE(0x303C, 0x051F, 0xABEB);
  388. extern pascal OSErr DMGetGDeviceByDisplayID(DisplayIDType displayID, GDHandle *displayDevice, Boolean failToMain)
  389.  THREEWORDINLINE(0x303C, 0x0520, 0xABEB);
  390. extern pascal OSErr DMSetDisplayComponent(GDHandle theDevice, ComponentInstance displayComponent)
  391.  THREEWORDINLINE(0x303C, 0x0421, 0xABEB);
  392. extern pascal OSErr DMGetDisplayComponent(GDHandle theDevice, ComponentInstance *displayComponent)
  393.  THREEWORDINLINE(0x303C, 0x0422, 0xABEB);
  394. extern pascal OSErr DMNewDisplay(GDHandle *newDevice, short driverRefNum, unsigned long mode, unsigned long reserved, DisplayIDType displayID, ComponentInstance displayComponent, Handle displayState)
  395.  THREEWORDINLINE(0x303C, 0x0D23, 0xABEB);
  396. extern pascal OSErr DMDisposeDisplay(GDHandle disposeDevice, Handle displayState)
  397.  THREEWORDINLINE(0x303C, 0x0424, 0xABEB);
  398. extern pascal OSErr DMResolveDisplayComponents(void)
  399.  TWOWORDINLINE(0x7025, 0xABEB);
  400. extern pascal OSErr DMRegisterExtendedNotifyProc(DMExtendedNotificationUPP notifyProc, void *notifyUserData, unsigned short nofifyOnFlags, ProcessSerialNumberPtr whichPSN)
  401.  THREEWORDINLINE(0x303C, 0x07EF, 0xABEB);
  402. extern pascal OSErr DMRemoveExtendedNotifyProc(DMExtendedNotificationUPP notifyProc, void *notifyUserData, ProcessSerialNumberPtr whichPSN, unsigned short removeFlags)
  403.  THREEWORDINLINE(0x303C, 0x0026, 0xABEB);
  404. extern pascal OSErr DMNewPanelList(DisplayIDType displayID, ResType panelType, DMFidelityType minimumFidelity, unsigned long panelListFlags, unsigned long reserved, DMListIndexType *thePanelCount, DMListType *thePanelList)
  405.  THREEWORDINLINE(0x303C, 0x0027, 0xABEB);
  406. extern pascal OSErr DMNewEngineList(DisplayIDType displayID, ResType engineType, DMFidelityType minimumFidelity, unsigned long engineListFlags, unsigned long reserved, DMListIndexType *engineCount, DMListType *engineList)
  407.  THREEWORDINLINE(0x303C, 0x0028, 0xABEB);
  408. extern pascal OSErr DMNewDeviceList(ResType deviceType, unsigned long deviceListFlags, unsigned long reserved, DMListIndexType *deviceCount, DMListType *deviceList)
  409.  THREEWORDINLINE(0x303C, 0x0029, 0xABEB);
  410. extern pascal OSErr DMNewDevicePortList(ResType subType, unsigned long portListFlags, unsigned long reserved, DMListIndexType *devicePortCount, DMListType *theDevicePortList)
  411.  THREEWORDINLINE(0x303C, 0x002A, 0xABEB);
  412. extern pascal OSErr DMGetIndexedItemFromList(DMListType panelList, DMListIndexType itemIndex, unsigned long reserved, DMListIteratorUPP listIterator, void *userData)
  413.  THREEWORDINLINE(0x303C, 0x002B, 0xABEB);
  414. extern pascal OSErr DMDisposeList(DMListType panelList)
  415.  THREEWORDINLINE(0x303C, 0x002C, 0xABEB);
  416. extern pascal OSErr DMGetNameByDisplayID(DisplayIDType displayID, Str255 *name)
  417.  THREEWORDINLINE(0x303C, 0x042D, 0xABEB);
  418. extern pascal OSErr DMNewDisplayIDByPortComponent(Component thePortComponent, ResType portKind, unsigned long reserved, DisplayIDType *newID)
  419.  THREEWORDINLINE(0x303C, 0x082E, 0xABEB);
  420. extern pascal OSErr DMGetPortComponentByPortID(DisplayIDType thePortID, Component *thePortComponent, ComponentDescription *theDesciption, ResType *thePortKind)
  421.  THREEWORDINLINE(0x303C, 0x082F, 0xABEB);
  422. extern pascal OSErr DMSendDependentNotification(ResType notifyType, ResType notifyClass, DisplayIDType displayID, unsigned long portID, ComponentInstance notifyComponent)
  423.  THREEWORDINLINE(0x303C, 0x002D, 0xABEB);
  424. extern pascal OSErr DMDisposePortComponent(Component thePortComponent)
  425.  THREEWORDINLINE(0x303C, 0x0231, 0xABEB);
  426. /*pascal OSErr DMGetPortIDByDeviceComponent(Component deviceComponent, DisplayIDType* displayID)*/
  427. /*    = {0x303C,0x0032,0xABEB};*/
  428. extern pascal OSErr DMGetDisplayIDByDeviceComponent(Component deviceComponent, DisplayIDType *displayID)
  429.  THREEWORDINLINE(0x303C, 0x002E, 0xABEB);
  430. /*
  431.     Required calls in components:
  432.     
  433.  
  434.     GeneralDeviceCalls
  435.         Return information specific to all devices
  436.  
  437.     OSErr        CountDevicePorts(unsigned long portCount, ResType deviceType);
  438.     OSErr        GetPortInfo(unsigned long portNumber,PortInfoRec* portInfo);
  439.                     PortInfo gives information for multiported devices (such as Telecaster).
  440.     OSErr        CountPortEngineComponents(unsigned long portNumber,unsigned long* engineCount);
  441.     OSErr        GetPortEngineComponentInfo(unsigned long portNumber,unsigned long engineCount, DevicePortInfoRec* componentInfo);
  442.  
  443.  
  444.     Video Engine Components
  445.         Return information specific to video devices
  446.  
  447.     OSErr        CheckTiming
  448.                     Give the device a chance to okay or modify device settings
  449.                     especially useful for overridding the "needsConfirm" bit.
  450.     OSErr        GetVideoInfo
  451.                     It would be nice to be able to get direct info about screen size
  452.                     dot pitch etc.  This obviously needs to be fleshed out.
  453.     OSErr        SetWiggleDevice(Boolean wiggleDevice);
  454.     OSErr        GetWiggleDevice(Boolean* isWiggling);
  455.                     Returns an error if device is not capable of wiggling
  456.  
  457.     Sound Engine Components
  458.     
  459.     OSErr        SetWiggleDevice(Boolean wiggleDevice);
  460.     OSErr        GetWiggleDevice(Boolean* isWiggling);
  461.                     Returns an error if device is not capable of wiggling
  462.  
  463.     HI Component Calls
  464.     
  465.     OSErr        TargetDevice(DisplayID displayID);
  466.     We could also define a standard notify message and call that when we had an update issue (saving on components having to register for notifies)
  467.             That would by us not having to handle an extended remove notification that handles "you data" specific removes.
  468. */
  469.  
  470. #ifdef __CFM68K__
  471. #pragma lib_export off
  472. #endif
  473.  
  474. #if GENERATINGPOWERPC
  475. #pragma options align=reset
  476. #endif
  477.  
  478. #ifdef __cplusplus
  479. }
  480. #endif
  481.  
  482. #endif /* __DISPLAYS__ */
  483.